//输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
//
// 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
//
//
//
// 示例 1：
//
// 输入：target = 9
//输出：[[2,3,4],[4,5]]
//
//
// 示例 2：
//
// 输入：target = 15
//输出：[[1,2,3,4,5],[4,5,6],[7,8]]
//
//
//
//
// 限制：
//
//
// 1 <= target <= 10^5
//
//
//
//
// Related Topics 数学 双指针 枚举 👍 548 👎 0

//? 暴力解法
//leetcode submit region begin(Prohibit modification and deletion)
function findContinuousSequence(target: number): number[][] {

    let res = []
    let temp = []
    let count = 0
    for (let i = 1; i <= Math.floor(target / 2); i ++) {
        for (let j = i; j < target; j ++) {
            temp.push(j)
            count += j
            if (count === target) {
                res.push(temp.slice())
                break
            }
            else if (count > target) {
                count = 0
                temp = []
                break
            }
        }
    }
    return res
};
//leetcode submit region end(Prohibit modification and deletion)
//输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
//
// 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
//
//
//
// 示例 1：
//
// 输入：target = 9
//输出：[[2,3,4],[4,5]]
//
//
// 示例 2：
//
// 输入：target = 15
//输出：[[1,2,3,4,5],[4,5,6],[7,8]]
//
//
//
//
// 限制：
//
//
// 1 <= target <= 10^5
//
//
//
//
// Related Topics 数学 双指针 枚举 👍 548 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
//? 滑动窗口
function findContinuousSequence2(target: number): number[][] {

    let res = []
    let temp = []
    let count = 0
    let fast = 1
    let slow = 1
    while (slow <= Math.floor(target / 2)) {
        if (count < target) {
            count += fast
            temp.push(fast)
            fast++
        }
        else if (count === target) {
            count -= slow
            res.push(temp.slice())
            temp.shift()
            slow ++
        }
        else {
            temp.shift()
            count -= slow
            slow ++
        }
    }
    return res
};
//leetcode submit region end(Prohibit modification and deletion)
